



# 实现思路是
# 1*1 换行
# 2*1 2*2 在换行
# 这样的话就是控制两个循环体。
# 控制x从1到9，在这个循环体中控制y从1到9乘以x，y++,当x大于y的时候就跳出，然后换行 x++

x = 1  # x从1开始
while x <= 9:  # 规定x不能大于9，大于9则跳出
    y = 1  # y从1开始
    while y <= x:  # y不能大于x,否则跳出
        print('{} * {}= {:<4}'.format(x, y, x * y), end="")  # 计算结果不够4位，格式化后补充到4位
        y += 1  # y叠加
    print("")  # 输出一行后，进行换行
    x += 1  # y叠加


print('*' * 150)  # 分隔符


# 实现思路是
# 9*9,9*8 ...9*1 换行
# 8*8, 8*7 在换行
# 这样的话就是控制两个循环体。
# 控制x从9到1，在这个循环体中控制y从9到1乘以x，y--,当x大于y的时候就跳出，然后换行 x--
x = 9
while x <= 9:  # 规定x不能大于9，大于9则跳出
    y = x
    while y <= 9:
        print('{} * {}= {:<4}'.format(x, y, x * y), end="")  # 计算结果不够4位，格式化后补充到4位
        y -= 1
        if y == 0:
            break
    print("")
    x -= 1
    if x == 0:
        break

print('*' * 150)  # 分隔符

# 实现思路是 完成第一种后优化，先输入空格占用位置，然后在输入x*y
# 首先要知道每一行空位占位是从8到0，那这样的话就先知道第一次出现就是8个公式位置。
# 那这样的话，在大循环体中初始化一个计数1，然后判断从8到0输出占位就行了。这里要注意不要忘了要叠加计数就行了
x = 1
while x <= 9:
    k = 1
    while k <= 9 - x:
        print("        ", end='')
        k += 1
    y = 1
    while y <= x:
        print('{}*{}={:<4}'.format(x, y, x * y), end="")  # 计算结果不够4位，格式化后补充到4位
        y += 1
    print("")
    x += 1

print('*' * 150)  # 分隔符

# 实现思路是 完成第二种后优化，首先要知道是9到1输出的。然后每少一个数前面就要有一个占位
# 知道要的效果，那就好办了。寻找规律，占位是0到8个的占位。
# 先初始化一个计数0，大循环一次那就打印计数*占位符一次，这里要注意的是需要每次都要+1就行了
x = 9
k = 0
while x >= 1:
    print('        ' * k, end="")
    k += 1
    y = x
    while y >= 1:
        print('{}*{}={:<4}'.format(x, y, x * y), end="")  # 计算结果不够4位，格式化后补充到4位
        y -= 1
    x -= 1
    print()

print('*' * 15)  # 分隔符

# 实现思路是利用两个1到9的for进行正序的相乘，需要注意的是需要在合适的位置break出来
# 首先两个循环体，里面的循环体要判断不能大于外部的循环体否则跳出就好了，主要利用range函数就可以满足了
for x in range(1, 10):
    for y in range(1, 10):
        if y <= x:
            print('{} * {}= {:<4}'.format(x, y, x * y), end="")  # 计算结果不够4位，格式化后补充到4位
        else:
            break
    print("")

print('*' * 150)  # 分隔符

# 实现思路是利用两个9到1的for进行倒序的相乘，需要注意的是需要在合适的位置break出来
# 首先两个循环体，里面的循环体要判断不能大于外部的循环体否则跳出就好了，这里需要注意的就是range函数第三个参数-1就是反序的意思
for x in range(9, 0, -1):
    for y in range(x, 0, -1):
        if y >= 1:
            print('{} * {}= {:<4}'.format(x, y, x * y), end=" ")  # 计算结果不够4位，格式化后补充到4位
        else:
            break
    print()

print('*' * 150)  # 分隔符

# 实现思路就是优化第一种for的方式，先输出占位符后在输出公式
# 这里就是在原来的代码中第二个循环体上面添加一个条件，打印9-x个公式空格就行了
for x in range(1, 10):
    print("           " * (9 - x), end="")
    for y in range(1, 10):
        if y <= x:
            print('{} * {}= {:<4}'.format(x, y, x * y), end="")  # 计算结果不够4位，格式化后补充到4位
        else:
            break
    print("")

print('*' * 150)  # 分隔符

# 实现思路就是优化第一种for的方式，先输出占位符后在输出公式，但是这次是倒序那就有需要一个循环体了
# 也就是说需要三个循环体，一个主循环，两个小循环。其中一个是控制公式占位空格，这里可以找到规则空格规律就是0到8
# 那么就是说创建一个1到10-x的列表，进行循环就行了
for x in range(9, 0, -1):
    for k in range(1, 10 - x):
        print(end="           ")
    for y in range(x, 0, -1):
        if y >= 1:
            print('{} * {}= {:<4}'.format(x, y, x * y), end="")  # 计算结果不够4位，格式化后补充到4位
        else:
            break
    print()
